#define  _CRT_SECURE_NO_WARNINGS 1
//#include"head.h"

//函数指针数组-->是数组，数组元素是函数指针

//int Add(int a, int b)
//{
//    return a + b;
//}
//
//int Sub(int a, int b)
//{
//    return a - b;
//}
//
//int main()
//{
//    //int(*pf1)(int, int) = &Add;
//    //int(*pf2)(int, int) = &Sub;
//
//    //函数指针数组
//    int(*pf[2])(int, int) = { Add,Sub };//函数名也是指针/地址
//
//
//    return 0;
//}

//======================================================

//函数指针数组应用

//计算器
//整数加 减 乘 除 
//void menu()
//{
//	printf("----------计算器----------\n");
//    printf("-------1.add   2.sub------\n");
//    printf("-------3.mul   4.div------\n");
//    printf("-----------0.exit---------\n");
//    printf("--------------------------\n");
//    printf("请选择：");
//}
//
//int Add(int a, int b)
//{
//    return a + b;
//}
//
//int Sub(int a, int b)
//{
//    return a - b;
//}
//
//int Mul(int a, int b)
//{
//    return a * b;
//}
//
//int Div(int a, int b)
//{
//    return a / b;
//}
//
//int main()
//{
//    int choice = 0;
//    int x = 0;
//    int y = 0;
//    int r = 0;
//    do
//    {
//        menu();
//        scanf("%d", &choice);
//        switch (choice)
//        {
//        case 1:
//            printf("请输入两个操作数：");
//            scanf("%d%d", &x, &y);
//            r = Add(x, y);
//            printf("%d\n", r);
//            break;
//        case 2:
//            printf("请输入两个操作数：");
//            scanf("%d%d", &x, &y);
//            r = Sub(x, y);
//            printf("%d\n", r);
//            break;
//        case 3:
//            printf("请输入两个操作数：");
//            scanf("%d%d", &x, &y);
//            r = Mul(x, y);
//            printf("%d\n", r);
//            break;
//        case 4:
//            printf("请输入两个操作数：");
//            scanf("%d%d", &x, &y);
//            r = Div(x, y);
//            printf("%d\n", r);
//            break;
//        case 0:
//            printf("退出程序\n");
//            break; 
//        default:
//            printf("输入错误\n");
//            break;
//        }
//
//    }while (choice);
//
//    return 0;
//}
//问题：代码冗余

//优化：函数指针数组
//void menu()
//{
//    printf("----------计算器----------\n");
//    printf("-------1.add   2.sub------\n");
//    printf("-------3.mul   4.div------\n");
//    printf("-----------0.exit---------\n");
//    printf("--------------------------\n");
//    printf("请选择：");
//}
//
//int Add(int a, int b)
//{
//    return a + b;
//}
//
// int Sub(int a, int b)
//{
//    return a - b;
//}
//
//int Mul(int a, int b)
//{
//    return a * b;
//}
//
//int Div(int a, int b)
//{
//    return a / b;
//}
//
//int main()
//{
//    int choice = 0;
//    int x = 0;
//    int y = 0;
//    int r = 0;
//    //函数指针数组
//    int(*pfarr[])(int, int) = { NULL,Add,Sub,Mul,Div };
//
//    do
//    {
//        menu();
//        scanf("%d", &choice);
//        if (choice >= 1 && choice <= 4)
//        {
//            printf("请输入两个操作数：");
//            scanf("%d%d", &x, &y);
//            r = pfarr[choice](x, y);
//            printf("%d\n", r);
//        }
//        else if (choice == 0)
//        {
//            printf("退出程序\n");
//        }
//        else
//        {
//            printf("输入错误\n");
//        }
//    } while (choice);
//
//    return 0;
//}